package com.wgh.search.service;

import com.wgh.search.entity.ProductDoc;
import com.wgh.common.vo.PageResult;
import java.util.List;
import java.util.Map;

/**
 * 商品搜索服务接口
 */
public interface ProductSearchService {
    
    /**
     * 搜索商品
     * @param keyword 关键词
     * @param categoryId 分类ID
     * @param brandId 品牌ID
     * @param priceRange 价格范围
     * @param sortField 排序字段
     * @param sortOrder 排序方式（asc/desc）
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @param filters 过滤条件
     * @return 搜索结果
     */
    PageResult<ProductDoc> searchProducts(String keyword, Long categoryId, Long brandId, 
                                        String priceRange, String sortField, String sortOrder,
                                        Integer pageNum, Integer pageSize, Map<String, Object> filters);
    
    /**
     * 添加商品到索引
     * @param productDoc 商品文档
     * @return 添加结果
     */
    boolean addProductToIndex(ProductDoc productDoc);
    
    /**
     * 批量添加商品到索引
     * @param productDocs 商品文档列表
     * @return 添加结果
     */
    boolean batchAddProductsToIndex(List<ProductDoc> productDocs);
    
    /**
     * 更新索引中的商品
     * @param productDoc 商品文档
     * @return 更新结果
     */
    boolean updateProductInIndex(ProductDoc productDoc);
    
    /**
     * 从索引中删除商品
     * @param productId 商品ID
     * @return 删除结果
     */
    boolean deleteProductFromIndex(Long productId);
    
    /**
     * 根据商品ID获取商品文档
     * @param productId 商品ID
     * @return 商品文档
     */
    ProductDoc getProductFromIndex(Long productId);
    
    /**
     * 重建商品索引
     * @return 重建结果
     */
    boolean rebuildProductIndex();
    
    /**
     * 获取搜索建议
     * @param keyword 关键词
     * @param count 建议数量
     * @return 搜索建议列表
     */
    List<String> getSearchSuggestions(String keyword, Integer count);
    
    /**
     * 获取搜索聚合信息
     * @param keyword 关键词
     * @return 聚合信息
     */
    Map<String, Object> getSearchAggregations(String keyword);
}